/**
 * 
 */
package com.qdairlines.service.file;

import java.util.List;

import org.springframework.http.ResponseEntity;
import org.springframework.web.multipart.MultipartFile;

import com.qdairlines.entity.file.FastDFSFile;

/**
 * @author pangyannan
 * @date 2016年12月12日
 * @company QingDao Airlines
 * @description FastDFS上传文件管理服务，将上传的文件信息保存到数据库中
 */
 
public interface FastDFSFileService {
	
	//public static  String D_TYPE="0";
	
	public enum DELETE_TYPE{  
		TRUE, //物理删除
		LOGIC ; //逻辑删除
	} 
	
	/**
	 * 根据上传人、上传的附件、上传的模块和模块ID上传文件,上传成功，返回上传后的id，上传失败，返回0
	 * @param workcode
	 * @param type
	 * @param typeKey
	 * @param multipartFile
	 * @return
	 */
	public String add(String workcode,String type,String typeKey,MultipartFile multipartFile);
	
	
	/**
	 * 根据删除人，删除的id值，删除附件。
	 * DELETE_TYPE.TRUE 删除附件是在服务器上真实删除附件，在数据库中也真删除记录
	 * DELETE_TYPE.LOGIC 删除附件是在服务器上不删除附件，在数据库中做删除标记位
	 * @param workcode
	 * @param fastdfsFilesId
	 * @return 0 删除失败
	 */
	public int deleteById(String workcode,String fastdfsFilesId,DELETE_TYPE type);
	
	/**
	 * 根据 fastdfsFilesId 查找 文件数据，已被逻辑删除的，不会被查询
	 * @param fastdfsFilesId
	 * @return
	 */
	public FastDFSFile findById(String fastdfsFilesId);
	
	/**
	 * 根据 fastdfsFilesId 查找 fastDFS文件字符串key
	 * @param fastdfsFilesId
	 * @return
	 */
	public String getFastdfsKey(String fastdfsFilesId);

	/**
	 * 根据 fastdfsFilesId 下载文件 已被逻辑删除的，不会被查询
	 * @param fastdfsFilesId
	 * @return
	 */
	public ResponseEntity<byte[]> downloadFileById(String fastdfsFilesId);
	
	/**
	 * 根据一个id字符串，查询返回list,字符串用 , 分割。已被逻辑删除的，不会被查询
	 * @param fastdfsFilesIds
	 * @return
	 */
	public List<FastDFSFile> getListBy(String fastdfsFilesIds);
	
	/**
	 * 根据模块名称、模块key查询附件清单。已被逻辑删除的，不会被查询
	 * @param type
	 * @param typeKey
	 * @return
	 */
	public List<FastDFSFile> getByTypeId(String type,String typeKey);

	/**
	 * 根据文件id和最大的尺寸，获取缩略图
	 * @param fastdfsFilesId
	 * @param max
	 * @return
	 */
	ResponseEntity<byte[]> getSmallImage(String fastdfsFilesId, int max);
}
